<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>情形三：设置 doc_root 或 user_dir</title>
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-base.css" />
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-medium.css" />

 </head>
 <body class="docs"><div class="navbar navbar-fixed-top">
  <div class="navbar-inner clearfix">
    <ul class="nav" style="width: 100%">
      <li style="float: left;"><a href="security.cgi-bin.force-redirect.html">« 情形二：使用 cgi.force_redirect</a></li>
      <li style="float: right;"><a href="security.cgi-bin.shell.html">情形四：PHP 解释器放在 web 目录以外 »</a></li>
    </ul>
  </div>
</div>
<div id="breadcrumbs" class="clearfix">
  <ul class="breadcrumbs-container">
    <li><a href="index.html">PHP Manual</a></li>
    <li><a href="security.cgi-bin.html">以 CGI 模式安装时</a></li>
    <li>情形三：设置 doc_root 或 user_dir</li>
  </ul>
</div>
<div id="layout">
  <div id="layout-content"><div id="security.cgi-bin.doc-root" class="sect1">
    <h2 class="title">情形三：设置 doc_root 或 user_dir</h2>
    <p class="simpara">
     在 web 服务器的主文档目录中包含动态内容如脚本和可执行程序有时被认为是一种不安全的实践。如果因为配置上的错误而未能执行脚本而作为普通
     HTML 文档显示，那就可能导致知识产权或密码资料的泄露。所以很多系统管理员都会专门设置一个只能通过
     PHP CGI 来访问的目录，这样该目录中的内容只会被解析而不会原样显示出来。
    </p>
    <p class="simpara">
     对于前面所说无法判断是否重定向的情况，很有必要在主文档目录之外建立一个专用于脚本的
     doc_root 目录。
    </p>
    <p class="simpara">
     可以通过<a href="configuration.file.html" class="link">配置文件</a>内的
     <a href="ini.core.html#ini.doc-root" class="link">doc_root</a> 
     指令或设置环境变量
     <var class="envar">PHP_DOCUMENT_ROOT</var> 来定义 PHP 脚本主目录。如果设置了该项，那么
     PHP 的 <abbr title="Common Gateway Interface">CGI</abbr> 版本就只会解释 <code class="parameter">doc_root</code>
     目录下的文件，并确保目录外的脚本不会被 PHP
     解释器执行（下面所说的 <code class="parameter">user_dir</code> 除外）。
    </p>
    <p class="simpara">
     另一个可用的选项就是
     <a href="ini.core.html#ini.user-dir" class="link">user_dir</a>。当 user_dir
     没有设置的时候，<code class="parameter">doc_root</code>
     就是唯一能控制在哪里打开文件的选项。访问如
     <var class="filename">http://my.host/~user/doc.php</var>
     这个 URL 时，并不会打开用户主目录下文件，而只会执行
     doc_root 目录下的
     <var class="filename">~user/doc.php</var>（这个子目录以
     [<code class="literal">~</code>] 作开头）。
    </p>
    <p class="simpara">
     如果设置了 user_dir，例如
     <var class="filename">public_php</var>，那么像
     <var class="filename">http://my.host/~user/doc.php</var>
     这样的请求将会执行用户主目录下的
     <var class="filename">public_php</var> 子目录下的
     <var class="filename">doc.php</var> 文件。假设用户主目录的绝对路径是
     <var class="filename">/home/user</var>，那么被执行文件将会是
     <var class="filename">/home/user/public_php/doc.php</var>。
    </p>
    <p class="simpara">
     <code class="parameter">user_dir</code> 的设置与
     <code class="parameter">doc_root</code> 无关，所以可以分别控制
     PHP 脚本的主目录和用户目录。
    </p>
   </div></div></div></body></html>